home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d18 / turbotut.arc / AMORT4.PAS < prev    next >
Pascal/Delphi Source File  |  1989-06-30  |  3KB  |  100 lines

  1. PROGRAM amortization_table;
  2.  
  3. VAR month : 1..12;
  4.     starting_month : 1..12;
  5.     balance : REAL;
  6.     payment : REAL;
  7.     interest_rate : REAL;
  8.     annual_accum_interest : REAL;
  9.     year : INTEGER;
  10.     number_of_years : INTEGER;
  11.     original_loan : REAL;
  12.  
  13.  
  14. PROCEDURE calculate_payment; (* ***************** calculate payment *)
  15. VAR temp : REAL;
  16.     index : INTEGER;
  17. BEGIN
  18.   temp := 1.0;
  19.   FOR index := 1 TO 12*number_of_years DO
  20.     temp := temp * (1.0 + interest_rate);
  21.   payment := original_loan*interest_rate/(1.0 - 1.0/temp);
  22. END;
  23.  
  24. PROCEDURE initialize_data; (* ********************* initialize data *)
  25. BEGIN
  26.   WRITELN('   Pascal amortization program');
  27.   WRITELN;
  28.   WRITE('Enter amount borrowed                         ');
  29.   READLN(original_loan);
  30.     balance := original_loan;
  31.   WRITE('Enter interest rate as percentage (i.e. 13.5) ');
  32.   READLN(interest_rate);
  33.     interest_rate := interest_rate/1200.0;
  34.   WRITE('Enter number of years of payoff               ');
  35.   READLN(number_of_years);
  36.   WRITE('Enter month of first payment (i.e. 5 for May) ');
  37.   READLN(starting_month);
  38.   WRITE('Enter year of first payment (i.e. 1985)       ');
  39.   READLN(year);
  40.     calculate_payment;
  41.   annual_accum_interest := 0.0;  (* This is to accumulate Interest *)
  42. END;
  43.  
  44. PROCEDURE print_annual_header; (* ************** print annual header *)
  45. BEGIN
  46.   WRITELN;
  47.   WRITELN;
  48.   WRITELN('Original loan amount = ',original_loan:10:2,
  49.           '   Interest rate = ',1200.0*interest_rate:6:2,'%');
  50.   WRITELN;
  51.   WRITELN('Month    payment  interest    princ   balance');
  52.   WRITELN;
  53. END;
  54.  
  55. PROCEDURE calculate_and_print; (* ************** calculate and print *)
  56. VAR interest_payment : REAL;
  57.     principal_payment : REAL;
  58. BEGIN
  59.   IF balance > 0.0 THEN
  60.   BEGIN
  61.     interest_payment := interest_rate * balance;
  62.     principal_payment := payment - interest_payment;
  63.     IF principal_payment > balance THEN
  64.     BEGIN  (* loan payed off this month *)
  65.       principal_payment := balance;
  66.       payment := principal_payment + interest_payment;
  67.       balance := 0.0;
  68.     END
  69.     ELSE
  70.     BEGIN  (* regular monthly payment *)
  71.       balance := balance - principal_payment;
  72.     END;
  73.     annual_accum_interest := annual_accum_interest + interest_payment;
  74.     WRITELN(month:5,payment:10:2,interest_payment:10:2,
  75.             principal_payment:10:2,balance:10:2);
  76.   END; (* of IF balance > 0.0 THEN *)
  77. END;
  78.  
  79. PROCEDURE print_annual_summary; (* ************ print annual summary *)
  80. BEGIN
  81.   WRITELN;
  82.   WRITELN('Total interest for ',year:5,' = ',
  83.            annual_accum_interest:10:2);
  84.   annual_accum_interest := 0.0;
  85.   year := year + 1;
  86.   WRITELN;
  87. END;
  88.  
  89. BEGIN   (* ********************************************* main program *)
  90.   initialize_data;
  91.   REPEAT
  92.     print_annual_header;
  93.     FOR month := starting_month TO 12 DO
  94.     BEGIN
  95.       calculate_and_print;
  96.     END;
  97.     print_annual_summary;
  98.     starting_month := 1;
  99.   UNTIL balance <= 0.0;
  100. END. (* of main program *)